1 Abstract/summary (so far)

  • Downstream gradient is related more dissimilarity through time
  • Human pressure recent increase is related more dissimilarity through time and less species richness increase
  • Cluster analysis reveals 6 contrasted scenarios of biodiversity trends, indicating a low dimensionality of biodiversity trends
  • Cluster analysis seems reveal that the spatial heterogeneity of biodiversity changes takes place at lower scale that previously shown (Blowes et al. 2019; Klink et al. 2020) (might be a caracteristic of a stream)

2 Introduction

2.1 Documenting community changes

  • Global changes have affect a tremendous effect communities

  • Understanding assembly and disassembly rules

  • Give a more complex and complete picture of what is going on ?

  • Many papers report temporal trends of local species richness and turnover

    • Abundance (Klink et al. 2020)
    • Species richness and or turnover: (Vellend et al. 2013, @dornelas_assemblage_2014, @blowes_geography_2019)
    • They describe basically no trends in species richness but high turnover
    • Species turnover vary a lot according to geography and taxa (Blowes et al. 2019)
    • Species turnover (as opposite of nestedness (???)) has been reported to be the major change, i.e. change in species identity, which is coherent with the absence of species richness trends

2.2 Multiple facets of biodiversity

  • To complete

2.3 Long-term and short term pressure

2.4 Research gap

  • Biodiversity trends are often analysed one facet at a time
  • Ecological drivers are often not included in Biodiversity trends assessment at global scale
  • Spatial grain is often at the continental scale, hiding more local heterogeneity

2.5 Fish freshwater in streams

  • Streams are a good model to study turnover:
    • They are spatially delimited at the basin level
    • Stream fishes are strongly constrained by hydrological constrains, which are highly variable at a small spatial scale, making possible to ecological drivers at multiple places, here the basin scale.

3 Methods

3.1 Data selection

filtered_dataset  <- map(filtered_dataset,
  ~.x %>%
    filter(siteid %in% unique(modelling_data$siteid))
)

uabun <- tabyl_df(filtered_dataset$site_quali, "unitabundance") %$%
  setNames(.$percent, .$unitabundance)
protocol <- tabyl_df(filtered_dataset$site_quali, "protocol")
electro <- str_detect(filtered_dataset$site_quali$protocol, "Electro") %>%
  sum / nrow(filtered_dataset$site_quali) * 100

year_samp <- modelling_data %>%
  summarise(enframe(summary_distribution(year))) %>%
  mutate(value = round(value)) %>%
  deframe()

year_samp_hft <- modelling_data %>%
  summarise(
    be93 = sum(year <= 1993) / n(),
    a93 = sum(year > 1993) / n(),
    bw9309 = sum(year > 1993 & year <= 2009) / n(),
    a09 = sum(year > 2009) / n()
    ) %>%
  mutate(across(everything(), scales::percent)) %>%
  pivot_longer(everything(), names_to = "name", values_to = "value") %>%
  deframe()
  • Unique protocol and unique unit of abundance by site

  • One sampling by year and site

  • In each site, samplings should be in the median (more or less one month and half, i.e. 1.5 month)

  • 5 samplings minimum by site, span 10 years

  • 5359 sites

  • 98.1% of the sites were monitored with electrofishing

  • The year of samplings goes from 1955 to 2019 with first, second and third quartile being respectively 1999, 2006, 2012.

loc <- filtered_dataset$location %>%
  left_join(filtered_dataset$site_quali, by = "siteid") %>%
  st_as_sf(coords = c("longitude", "latitude"),
  crs = 4326)
fig_sites <- paste0(
  "Distribution of the sites.")
ggplot(data = world) +
    geom_sf() +
    geom_sf(data = loc, aes(color = protocol), shape = 1) +
#    coord_sf(xlim = bb[c("xmin", "xmax")],
#      ylim = bb[c("ymin", "ymax")],
#      datum = 4326, expand = TRUE) +
    theme(legend.position = "bottom") +
    labs(title = paste0("Number of sites: ", nrow(loc)))
Distribution of the sites.

Figure 3.1: Distribution of the sites.

3.2 Biodiversity

3.2.1 Total abundance

Total abundance was reported in four different units: Count, Count by 100m^2, Leslie index & CPUE. The two first units account for 80% of the data.

3.2.2 Species richness

We computed species richness with coverage-based correction proposed by (???). The Chao index correct the species richness for the sampling coverage. The sampling coverage of each sampling is evaluated by the total number of individual and the number of singleton and (double) species. All the sampling events were set at the same coverage of .80, interpolation and rarefaction for respectively low and high coverage sampling. Chao index was logged to express the temporal trends of species richness of percentage variation. The temporal trends estimated from uncorrected species richness gave the same results (Figure SXX).

3.2.3 Betadiversity

Betadiversity metrics compares the composition of two communities. In our case, we compare the composition of each time step relatively to the baseline, i.e. the first year of sampling.

  • Species exchange index: (Hillebrand et al. 2018)
    • Presence-absence: \(J = SER_r = \dfrac{S_{imm} + S_{lost}}{S_{tot}}\)
    • Relative abundance: \(SER_a = \dfrac{\sum_i (p_i - p^{\prime}_i)^2}{\sum_i p_i^2 + \sum_i p^{\prime2}_i - \sum_i p_i p^{\prime}_i}\)
    • \(S_{imm}\), \(S_{lost}\), \(S_{tot}\): number of immigrant, lost and total species respectively
    • \(i\): species \(i\), \(p\): relative abundance, \(\prime\): second community
    • \(J\): Jaccard index

Turnover metrics based on presence/absence can be decomposed in appearance/disappearance and nestedness / turnover.

  • appearance: \(\dfrac{S_{imm}}{S_{tot}}\), disappearance: \(\dfrac{S_{lost}}{S_{tot}}\)

  • Turnover: \(J_t = \dfrac{2 * min(S_{lost}, S_{imm})}{S_{common} + (2 * min(S_{lost}, S_{imm})}\)

  • Nestedness: \(SER_r - J_t\)

4 Environment

var_pca <- dimnames(pca_riv_str$rotated$loadings)[[1]]
clean_var_pca <- get_river_atlas_significant_var()[
  get_river_atlas_significant_var() %in% var_pca]
high_load_rc1 <- pca_riv_str$rotated$loadings[
pca_riv_str$rotated$loadings[, "RC1"] > .90,
  "RC1"] 
clean_high_load_rc1_var <- get_river_atlas_significant_var()[
  get_river_atlas_significant_var() %in% names(high_load_rc1)]
  • The environment was characterized by the stream structure and human footprint difference between 2009 and 1993
  • The stream structure was characterized by a rotated PCA axis (fig 4.1). The PCA included dist_up_km, ord_stra, ele_mt_cav, slp_dg_cav, dis_m3_pyr, which are respectively Distance from source, Strahler order, Average elevation (m), Average slope (degree), Annual average of discharge (m3/s). Then, the first axis included in the analysis is associated with the following variables: Distance from source, Strahler order, Annual average of discharge (m3/s).
fig_cap_pca <- "Rotated PCA on stream structure. The first axis is related to
the distance from the source, stralher order and discharge (m3/s). The second
axis is related to the altitude and slope degree of the site. Only the first
axis was included in the analysis"
my_pca_plot(pca_riv_str$rotated)
#> Registered S3 method overwritten by 'ggforce':
#>   method           from 
#>   scale_type.units units
Rotated PCA on stream structure. The first axis is related to
the distance from the source, stralher order and discharge (m3/s). The second
axis is related to the altitude and slope degree of the site. Only the first
axis was included in the analysis

Figure 4.1: Rotated PCA on stream structure. The first axis is related to the distance from the source, stralher order and discharge (m3/s). The second axis is related to the altitude and slope degree of the site. Only the first axis was included in the analysis

h_hft_cap <- "Distribution of log base 2 ratio between human footprint in 1993 and
2009. -1 and +1 means an Human footprint respectively divided and multiplied by
      two"
modelling_data %>%
  group_by(siteid) %>%
  summarise(hft_ix_c9309_log2_ratio = unique(hft_ix_c9309_log2_ratio)) %>%
  ggplot(aes(x = hft_ix_c9309_log2_ratio)) +
  geom_histogram() +
  labs(
    x = "Human footprint ratio (1993-2009, Log base 2)",
    y = "Number of sites"
  ) +
theme_cowplot()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Distribution of log base 2 ratio between human footprint in 1993 and
2009. -1 and +1 means an Human footprint respectively divided and multiplied by
      two

Figure 4.2: Distribution of log base 2 ratio between human footprint in 1993 and 2009. -1 and +1 means an Human footprint respectively divided and multiplied by two

s_hft_diff <- round(summary_distribution(modelling_data$hft_ix_c9309_log2_ratio, na.rm = T), 2)
  • The human footprint difference between 1993 and 2009 is biaised toward an decrease of human footprint (average difference (sd): -0.12 (0.33)), meaning that in average the human footprint index decreased in 16 years.

5 Statistical analysis

5.1 Species composition change

In each site and at each sampling point, we computed the dissimilarity (Jaccard, Appearance, Disappearance, Turnover & Nestedness) between each time step and the reference time, i.e. the first year of sampling. Regarding the reference time step, there are two different strategies. First is to include it, i.e. setting a dissimilarity of 0 at each beginning of a time series (Blowes et al. 2019). Another strategy is to exclude the first year from the analysis (Dornelas et al. 2014). The first option logically constrains the analysis toward increasing dissimilarity as the second can capture recovery from perturbation soon after the first samplings. I guess that the first option makes more sense more it removes to sensibility to community changes happening just after the references year.

However as the relationship between most dissimilarity indices and time is highly non linear (like a Michaelis-Menten), we logged the number of year since the first year of sampling (plus one) to linearize the relationship. AIC of the models with logged years were up to twice lower (Table SXX).

5.2 Model

5.2.1 Turnover

Jaccard dissimilarity, nestedness, turnover, appearance, disappearance and hillebrand were modelled in two ways, Beta and gaussian regression. Beta regressions are more appropriate for distribution bounded by [0,1] and are linearized by a logit link. Logit links have the cons that coefficients are less easy to interpret. So we run both gaussian and beta regressions and investigate the sensitivity of our results to modelling choice. Values of turnover were slightly transformed such as values of one and zero fitted beta regression requirements (\(x' = \dfrac{x \times (N - 1) + 0.5}{N}\)).

The model is defined like this:

\[ \begin{align} \\ B_i &= \beta_0Y_i + \beta_1Y_iR_i + \beta_2Y_iH_i + \beta_3Y_i{HD}_i + \\& \beta_4Y_iR_iH_i + \beta_5Y_iR_i{HD}_i + \\& \beta_6Y_iH_i{HD}_i + \epsilon \end{align} \]

  • where:
    • \(Y\): log year number + 1
    • \(R\): First component of the PCA on the river structure related to the distance from spring, annual discharge, stralher order
    • \(H\): Human footprint of 1993
    • \({HD}\): Log 2 of Human footprint ratio (1993-2009)

\[ \begin{align} \\ \beta_{0}&=\beta_0 + u_{0i|j} + u_{0i} \end{align} \]

  • where:
    • \(\beta\): slope
    • \(u\): random effect
    • \(i\): site
    • \(j\): basin
  • The model formula in:
"biodiv_facet ~ 
0 + year/river_structure + year/human_footprint_diff +
(0 +  year | basin/site)"
#> [1] "biodiv_facet ~ \n0 + year/river_structure + year/human_footprint_diff +\n(0 +  year | basin/site)"
  • year: logged number of year (+1) since the beginning of the monitoring (site scale)
  • river_structure: PCA from upstream to downstream (centered and scaled)
  • human_footprint_diff: difference between 1993 and 2009 (centered and scaled)
  • basin: Hydrographic basin
  • site: site

As temporal trends of biodiversity facets had a Michaelis-Menten shape, we linearized the trends by taking the log of year number added to 1. Models with logged year had a lower AIC, up to twice (Table SXX).

At each site, all the dissimilarity indices had a value of 0 the first year. Then we constrained the intercept to 0 and kept only random effect on the slope. Models comparison shows that the results are qualitatively the same (Appendix SXX).

5.2.2 Species richness

At the difference with dissimilarity index, we modelled species richness with the intercept and the main effect of ecological drivers. We modelled logged species richness with Chao index.

\[ \begin{align} \\ B_i &= \alpha + \beta_0Y_i + \beta_1R_i + \beta_2Y_iR_i + \beta_3H_i + \beta_4Y_iH_i + \\& \beta_5Y_iR_iH_i + \beta_6Y_iR_i{HD}_i + \\& \beta_7Y_iH_i{HD}_i + \epsilon \end{align} \]

\[ \begin{align} \\ \alpha&=\alpha_0 + u_{0i|j} + u_{0j} \\ \beta_{0}&=\beta_0 + u_{0i|j} + u_{0j} \end{align} \]

  • where:
    • \(\alpha\): intercept
    • \(\beta\): slope
    • \(u\): random effect
    • \(i\): site
    • \(j\): basin

5.2.3 Total abundance

In the dataset, total abundance was described as raw count, counts by \(100m^2\), CPUE, and Leslie index representing respectively XX% of the sites. To account for this hererogeneity, we included the unit of measurement as a main affect explaining total abundance but also as an interaction with the year effect, in a similar way than previous studies (Klink et al. 2020). Similar to species richness modelling, we modelled the log of total abundances.

\[ \begin{align} \\ B_i &= \alpha + \beta_0Y_i + \beta_1U_i + \beta_2Y_iU_i + \beta_3R_i + \\& \beta_4Y_iR_i + \beta_5H_i + \beta_6Y_iH_i + \\& \beta_7Y_iR_iH_i + \beta_8Y_iR_i{HD}_i + \\& \beta_9Y_iH_i{HD}_i + \epsilon \end{align} \]

where \[ \begin{align} \\ \alpha&=\alpha_0 + u_{0i|j} + u_{0j} \\ \beta_{0}&=\beta_0 + u_{0i|j} + u_{0j} \end{align} \]

  • where:
    • \(\alpha\): intercept
    • \(\beta\): slope
    • \(u\): random effect
    • \(i\): site
    • \(j\): basin
    • \(U\): abundance unit

5.2.4 Implementation

All the statistical models were computed in R with the glmmTMB package. In order to facilitate the comparison of the effects, the reported slope coefficients were standardised as \(r_\delta = \beta \dfrac{\s_x}{\s_y}\), \(\beta\) being the unstandardised slope, \(s_x\) and \(s_y\) respectively the standard deviation of the explicative and response variable.

5.2.5 Estimation of fixed effects for each level of random effects (TO UPDATE)

The fixed effect coefficients for each level of random effects were computed as sum of the random effects and its corresponding fixed effects, known as BLUPs (Best Linear Unbiased Predictions, coef.merMod in R). However, the associated standard errors and confidence intervals are not computable on BLUPs. As an example, it means that while we are able to compute the temporal trends as each site and basin, those temporal trends have no associated errors.

tar_load(site_no_drivers_inla_tot)

The estimated temporal trends of total abundance were corrected according to abundance units, with the estimated fixed effect from the model.

5.3 Cluster analysis

kmeans_opt_nb_gr_sil_cap <- "Objective function value according to the
proportion of outliers data trimmed and the number of cluster(colored lines). Up
to 6 cluster, the proportion of trimmed data does not change the ranking of the clustering. We chose to stick with 6 clusters with a removal 0.05 of the outliers"
kmeans_sites <- "Distribution of the sites in discriminant space, colored by
their cluster assignement (left). Stilhouette profile. Black points represent sites that have been trimmed
at the 5% threshold."

Site were clustered based on the temporal trends of biodiversity facets using trimmed robust cluster method (???). Temporal trends were scaled but not centered before clustering. According to the optimal function, the optimal number of clusters was between 6 and 8 (Fig. ??). We used 25 starting positions and a maximum of 100 iterations. We trimmed 5% of outliers in the multidimentional space. We set cluster assignement as NA for sites that had an assignement improvement of 50% in another cluster. Clustering was computed with tclust R package.

6 Results

7 Discussion

  1. We find in average an increase in species richness, total abundance and dissimilarity:
    • in accordance with Klink et al. (2020), Dornelas et al. (2014), Blowes et al. (2019)
    • Dissimilarity mainly due to change in species composition and abundant species
  2. Stream gradient and human pressure drive temporal changes
    1. Downstream areas becomes more dissimilar than upstream, by higher changes in species identity [REF]
    2. Most degraded have higher increase in species richness, dissimilarity and appearance [REF]
    3. Recent increase in degradation decresase species richness but increase dissimilarity
  3. Interactions between pressures
    1. Long-term and short term increase in human pressure counteract effect of stream gradient
    2. Synergistic effects of long-term and short term pressures on change in species identity
  4. Clusters reveals that scenarios of biodiversity change are driven by few variables: change in species composition, total abundance and species richness
  5. High local heterogeneity in biodiversity changes:
    • Same cluster composition by realms
    • In contrast with Blowes et al. (2019), Klink et al. (2020)
    • Due to freshwater systems?

References

Blowes, Shane A., Sarah R. Supp, Laura H. Antão, Amanda Bates, Helge Bruelheide, Jonathan M. Chase, Faye Moyes, et al. 2019. “The Geography of Biodiversity Change in Marine and Terrestrial Assemblages.” Science 366 (6463): 339–45. https://doi.org/10.1126/science.aaw1620.

Dornelas, Maria, Nicholas J. Gotelli, Brian McGill, Hideyasu Shimadzu, Faye Moyes, Caya Sievers, and Anne E. Magurran. 2014. “Assemblage Time Series Reveal Biodiversity Change but Not Systematic Loss.” Science 344 (6181): 296–99. https://doi.org/10.1126/science.1248484.

Hillebrand, Helmut, Bernd Blasius, Elizabeth T. Borer, Jonathan M. Chase, John A. Downing, Britas Klemens Eriksson, Christopher T. Filstrup, et al. 2018. “Biodiversity Change Is Uncoupled from Species Richness Trends: Consequences for Conservation and Monitoring.” Journal of Applied Ecology 55 (1): 169–84. https://doi.org/https://doi.org/10.1111/1365-2664.12959.

Vellend, Mark, Lander Baeten, Isla H. Myers-Smith, Sarah C. Elmendorf, Robin Beauséjour, Carissa D. Brown, Pieter De Frenne, Kris Verheyen, and Sonja Wipf. 2013. “Global Meta-Analysis Reveals No Net Change in Local-Scale Plant Biodiversity over Time.” Proceedings of the National Academy of Sciences 110 (48): 19456–9.

Appendix

tu_full <- rbind(gaussian_inla_std_effects,
  gaussian_inla_exo_std_effects) %>%
  filter(!str_detect(term, "unitabundance|Intercept")) %>%
  mutate(
    term = str_replace_all(term, get_model_term_replacement()),
    response = get_var_replacement()[response]
    )

p1_f <- tu_full %>%
  filter(facet == "main") %>%
  arrange(desc(width_bar)) %>%
  plot_inla_fixed_effect() +
  scale_x_break(c(.21, .5))

p2_f <- tu_full %>%
  filter(facet == "interaction") %>%
  arrange(desc(width_bar)) %>%
  plot_inla_fixed_effect()

p3_f <- tu_full %>%
  filter(facet == "dbl_interaction") %>%
  arrange(desc(width_bar)) %>%
  plot_inla_fixed_effect(.,
    legend_present = TRUE,
    xaxis_title = TRUE
    ) +
  labs(x = "Standardized coefficients")

leg_dis_f <- get_legend(p3_f +
  theme(legend.position = "bottom") +
  guides(color = guide_legend(nrow = 4))
)

figS1 <- plot_grid(
  print(p1_f),
  print(p2_f),
  p3_f + theme(legend.position = "none"),
  leg_dis_f,
  rel_heights = c(1, 1, 1, .2),
  ncol = 1)
 figS1

1 Analysis

2 Reproducibility

Reproducibility receipt

## datetime
Sys.time()
#> [1] "2022-04-28 12:50:27 CDT"

## repository
if(requireNamespace('git2r', quietly = TRUE)) {
  git2r::repository()
} else {
  c(
    system2("git", args = c("log", "--name-status", "-1"), stdout = TRUE),
    system2("git", args = c("remote", "-v"), stdout = TRUE)
  )
}
#>  [1] "commit 81a9c0464d71b45b5c70e22152b089e6e004b15e"                            
#>  [2] "Author: Alain Danet <alain.danet@mnhn.fr>"                                  
#>  [3] "Date:   Thu Apr 28 12:28:21 2022 -0500"                                     
#>  [4] ""                                                                           
#>  [5] "    update meeting report"                                                  
#>  [6] ""                                                                           
#>  [7] "M\tdoc/xx-meeting-report.Rmd"                                               
#>  [8] "M\tdoc/xx-meeting-report.html"                                              
#>  [9] "origin\tgit@github.com:alaindanet/RivFishTimeBiodiversityFacets.git (fetch)"
#> [10] "origin\tgit@github.com:alaindanet/RivFishTimeBiodiversityFacets.git (push)"

## session info
sessionInfo()
#> R version 4.0.5 (2021-03-31)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Debian GNU/Linux 11 (bullseye)
#> 
#> Matrix products: default
#> BLAS:   /home/alain/.Renv/versions/4.0.5/lib/R/lib/libRblas.so
#> LAPACK: /home/alain/.Renv/versions/4.0.5/lib/R/lib/libRlapack.so
#> 
#> locale:
#>  [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=fr_FR.UTF-8        LC_COLLATE=fr_FR.UTF-8    
#>  [5] LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
#>  [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C       
#> 
#> attached base packages:
#> [1] parallel  stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] ggbreak_0.0.9           hrbrthemes_0.8.0       
#>  [3] factoextra_1.0.7        ade4_1.7-16            
#>  [5] tclust_1.4-2            ggeffects_1.0.1        
#>  [7] report_0.5.0.9000       see_0.6.8.1            
#>  [9] correlation_0.8.0       modelbased_0.7.1.1     
#> [11] effectsize_0.6.0.2      parameters_0.16.0      
#> [13] performance_0.8.0       bayestestR_0.11.5      
#> [15] datawizard_0.2.3        insight_0.15.0         
#> [17] easystats_0.4.3         glmmTMB_1.1.2.9000     
#> [19] inlatools_0.0.1.9001    INLA_21.11.22          
#> [21] sp_1.4-6                foreach_1.5.1          
#> [23] Matrix_1.3-2            future_1.24.0          
#> [25] slider_0.2.2            vegan_2.5-7            
#> [27] lattice_0.20-41         permute_0.9-5          
#> [29] codyn_2.0.5             janitor_2.1.0          
#> [31] viridis_0.6.2           viridisLite_0.4.0      
#> [33] cowplot_1.1.1           terra_1.5-21           
#> [35] rnaturalearthdata_0.1.0 rnaturalearth_0.1.0    
#> [37] sf_1.0-6                scales_1.1.1           
#> [39] kableExtra_1.3.4.9000   here_1.0.1             
#> [41] lubridate_1.8.0         magrittr_2.0.2         
#> [43] forcats_0.5.1           stringr_1.4.0          
#> [45] dplyr_1.0.8             purrr_0.3.4            
#> [47] readr_2.1.1             tidyr_1.2.0            
#> [49] tibble_3.1.6            ggplot2_3.3.5          
#> [51] tidyverse_1.3.1         tarchetypes_0.3.2      
#> [53] targets_0.8.1           conflicted_1.1.0       
#> [55] rmarkdown_2.11          nvimcom_0.9-124        
#> 
#> loaded via a namespace (and not attached):
#>   [1] utf8_1.2.2          tidyselect_1.1.1    lme4_1.1-26        
#>   [4] grid_4.0.5          munsell_0.5.0       codetools_0.2-18   
#>   [7] units_0.8-0         statmod_1.4.35      withr_2.4.3        
#>  [10] colorspace_2.0-0    highr_0.9           knitr_1.38         
#>  [13] rstudioapi_0.13     Rttf2pt1_1.3.8      listenv_0.8.0      
#>  [16] labeling_0.4.2      emmeans_1.7.2       mnormt_2.0.2       
#>  [19] polyclip_1.10-0     farver_2.0.3        rprojroot_2.0.2    
#>  [22] coda_0.19-4         parallelly_1.30.0   vctrs_0.3.8        
#>  [25] generics_0.1.0      TH.data_1.0-10      xfun_0.30          
#>  [28] R6_2.5.1            gridGraphics_0.5-1  cachem_1.0.4       
#>  [31] assertthat_0.2.1    multcomp_1.4-16     gtable_0.3.0       
#>  [34] globals_0.14.0      processx_3.5.2      sandwich_3.0-0     
#>  [37] rlang_1.0.2         systemfonts_1.0.0   splines_4.0.5      
#>  [40] extrafontdb_1.0     TMB_1.7.20          broom_0.7.12       
#>  [43] reshape2_1.4.4      yaml_2.2.1          modelr_0.1.8       
#>  [46] backports_1.2.1     extrafont_0.17      tools_4.0.5        
#>  [49] psych_2.0.12        bookdown_0.24       ggplotify_0.1.0    
#>  [52] ellipsis_0.3.2      jquerylib_0.1.3     plyr_1.8.6         
#>  [55] Rcpp_1.0.6          progress_1.2.2      classInt_0.4-3     
#>  [58] ps_1.6.0            prettyunits_1.1.1   zoo_1.8-8          
#>  [61] haven_2.5.0         ggrepel_0.9.1       cluster_2.1.1      
#>  [64] fs_1.5.2            data.table_1.13.6   warp_0.2.0         
#>  [67] reprex_2.0.1        tmvnsim_1.0-2       mvtnorm_1.1-1      
#>  [70] patchwork_1.1.1     hms_1.1.1           evaluate_0.15      
#>  [73] xtable_1.8-4        readxl_1.3.1        gridExtra_2.3      
#>  [76] compiler_4.0.5      KernSmooth_2.23-18  crayon_1.4.2       
#>  [79] minqa_1.2.4         htmltools_0.5.2     ggfun_0.0.5        
#>  [82] mgcv_1.8-34         tzdb_0.2.0          aplot_0.1.2        
#>  [85] DBI_1.1.1           tweenr_1.0.1        sjlabelled_1.1.7   
#>  [88] dbplyr_2.1.1        MASS_7.3-53.1       boot_1.3-27        
#>  [91] cli_3.2.0           igraph_1.3.0        pkgconfig_2.0.3    
#>  [94] numDeriv_2016.8-1.1 xml2_1.3.2          svglite_2.0.0      
#>  [97] ggcorrplot_0.1.3    bslib_0.2.4         webshot_0.5.2      
#> [100] estimability_1.3    rvest_1.0.2         yulab.utils_0.0.4  
#> [103] snakecase_0.11.0    callr_3.7.0         digest_0.6.27      
#> [106] cellranger_1.1.0    gdtools_0.2.3       nloptr_1.2.2.2     
#> [109] lifecycle_1.0.1     nlme_3.1-152        jsonlite_1.7.2     
#> [112] fansi_0.5.0         pillar_1.6.4        fastmap_1.1.0      
#> [115] httr_1.4.2          survival_3.2-10     glue_1.6.2         
#> [118] iterators_1.0.13    ggforce_0.3.2       class_7.3-18       
#> [121] stringi_1.7.6       sass_0.4.0          memoise_2.0.0      
#> [124] e1071_1.7-4